import numpy as np
np.set_printoptions(suppress=True)

input_example = [[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]


output_example = [[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
                  [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
                  [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
                  [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]]



def compare(o_e, o):
    assert isinstance(o_e, np.ndarray)
    assert isinstance(o, np.ndarray)

    if o_e.shape == o.shape:
        for i in range(0, o_e.shape[0]):
            for j in range(0, o_e.shape[1]):
                if np.isnan(o_e[i, j]):
                    pass
                else:
                    if round(float(o[i, j]), 8) != o_e[i, j]:
                        print(o[i, j])
                        print(o_e[i, j])
                        print(str(i) + "-" + str(j))
                        return False
        return True
    else:
        return False


def ourpreprocess(temp_arr):
    no=temp_arr.shape[1]
    DSIZE=temp_arr.shape[0]
    nptemp = np.empty(temp_arr.shape)
    for num in range(0,no):
        value=temp_arr[:,num]
        npArray=dataPreprocess(value,DSIZE)
        nptemp[:, num]=npArray
    return nptemp

def dataPreprocess(npArray,DSIZE):
    # min-max标准化   离差标准化，是对原始数据的线性变换，使结果值映射到[0 - 1]之间
    npArray = [(x - min(npArray)) / (max(npArray) - min(npArray)) for x in npArray]
    return npArray

# 用例目的
print("该用例目的为：")
print("进行数据标准化处理组件功能测试，错误输入状态下的表现")

# 子用例编号
print("子用例编号：")
print("Standardization_5")

print("****************************")
print("当前输入为：")
# 输出用例设置
print(input_example)
# 输出用例设置

print("")

print("****************************")
print("当前输出为:")
# 输出处理后数据
output = ourpreprocess(np.array(input_example))
print(output)
# 输出处理后数据

print("****************************")
print("是否正确:")
# 输出对比结果
# 需要写一个compare函数
if compare(np.array(output_example), output):
    print("输出与预定目标相符")
else:
    print("格式错误")
# 输出对比结果

print("\n")
